home *** CD-ROM | disk | FTP | other *** search
/ PC Advisor 2011 May / PC Advisor 190 E.iso / pc / ESSENTIALS / VLC Media Player 1.1 / vlc-1.1.5-win32.exe / sdk / include / vlc / plugins / vlc_variables.h < prev    next >
Encoding:
C/C++ Source or Header  |  2010-11-13  |  23.2 KB  |  737 lines

  1. /*****************************************************************************
  2.  * variables.h: variables handling
  3.  *****************************************************************************
  4.  * Copyright (C) 2002-2004 the VideoLAN team
  5.  * $Id: 258ed05fc15cba182493b0c33d911509c17eaf7b $
  6.  *
  7.  * Authors: Samuel Hocevar <sam@zoy.org>
  8.  *          Gildas Bazin <gbazin@netcourrier.com>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24.  
  25. #ifndef VLC_VARIABLES_H
  26. #define VLC_VARIABLES_H 1
  27.  
  28. /**
  29.  * \file
  30.  * This file defines functions and structures for dynamic variables in vlc
  31.  */
  32.  
  33. /**
  34.  * \defgroup variables Variables
  35.  *
  36.  * Functions for using the object variables in vlc.
  37.  *
  38.  * Vlc have a very powerful "object variable" infrastructure useful
  39.  * for many things.
  40.  *
  41.  * @{
  42.  */
  43.  
  44. /*****************************************************************************
  45.  * Variable types - probably very incomplete
  46.  *****************************************************************************/
  47. #define VLC_VAR_TYPE      0x00ff
  48. #define VLC_VAR_CLASS     0x00f0
  49. #define VLC_VAR_FLAGS     0xff00
  50.  
  51. /** \defgroup var_flags Additive flags
  52.  * These flags are added to the type field of the variable. Most as a result of
  53.  * a var_Change() call, but some may be added at creation time
  54.  * @{
  55.  */
  56. #define VLC_VAR_HASCHOICE 0x0100
  57. #define VLC_VAR_HASMIN    0x0200
  58. #define VLC_VAR_HASMAX    0x0400
  59. #define VLC_VAR_HASSTEP   0x0800
  60.  
  61. #define VLC_VAR_ISCOMMAND 0x2000
  62.  
  63. /** Creation flag */
  64. /* If the variable is not found on the current module
  65.    search all parents and finally module config until found */
  66. #define VLC_VAR_DOINHERIT 0x8000
  67. /**@}*/
  68.  
  69. /**
  70.  * \defgroup var_action Variable actions
  71.  * These are the different actions that can be used with var_Change().
  72.  * The parameters given are the meaning of the two last parameters of
  73.  * var_Change() when this action is being used.
  74.  * @{
  75.  */
  76.  
  77. /**
  78.  * Set the minimum value of this variable
  79.  * \param p_val The new minimum value
  80.  * \param p_val2 Unused
  81.  */
  82. #define VLC_VAR_SETMIN              0x0010
  83. /**
  84.  * Set the maximum value of this variable
  85.  * \param p_val The new maximum value
  86.  * \param p_val2 Unused
  87.  */
  88. #define VLC_VAR_SETMAX              0x0011
  89. #define VLC_VAR_SETSTEP             0x0012
  90.  
  91. /**
  92.  * Set the value of this variable without triggering any callbacks
  93.  * \param p_val The new value
  94.  * \param p_val2 Unused
  95.  */
  96. #define VLC_VAR_SETVALUE            0x0013
  97.  
  98. #define VLC_VAR_SETTEXT             0x0014
  99. #define VLC_VAR_GETTEXT             0x0015
  100.  
  101. #define VLC_VAR_GETMIN              0x0016
  102. #define VLC_VAR_GETMAX              0x0017
  103. #define VLC_VAR_GETSTEP             0x0018
  104.  
  105. #define VLC_VAR_ADDCHOICE           0x0020
  106. #define VLC_VAR_DELCHOICE           0x0021
  107. #define VLC_VAR_CLEARCHOICES        0x0022
  108. #define VLC_VAR_SETDEFAULT          0x0023
  109. #define VLC_VAR_GETCHOICES          0x0024
  110. #define VLC_VAR_GETLIST             0x0025
  111. #define VLC_VAR_CHOICESCOUNT        0x0026
  112.  
  113. #define VLC_VAR_SETISCOMMAND        0x0040
  114. /**@}*/
  115.  
  116. /** \defgroup var_GetAndSet Variable actions
  117.  * These are the different actions that can be used with var_GetAndSet()
  118.  * @{
  119.  */
  120. enum {
  121.     VLC_VAR_BOOL_TOGGLE, /**< Invert a boolean value (param ignored) */
  122.     VLC_VAR_INTEGER_ADD, /**< Add parameter to an integer value */
  123.     VLC_VAR_INTEGER_OR,  /**< Binary OR over an integer bits field */
  124.     VLC_VAR_INTEGER_NAND,/**< Binary NAND over an integer bits field */
  125. };
  126. /**@}*/
  127.  
  128. /*****************************************************************************
  129.  * Prototypes
  130.  *****************************************************************************/
  131. VLC_EXPORT( int, var_Create, ( vlc_object_t *, const char *, int ) );
  132. #define var_Create(a,b,c) var_Create( VLC_OBJECT(a), b, c )
  133.  
  134. VLC_EXPORT( int, var_Destroy, ( vlc_object_t *, const char * ) );
  135. #define var_Destroy(a,b) var_Destroy( VLC_OBJECT(a), b )
  136.  
  137. VLC_EXPORT( int, var_Change, ( vlc_object_t *, const char *, int, vlc_value_t *, vlc_value_t * ) );
  138. #define var_Change(a,b,c,d,e) var_Change( VLC_OBJECT(a), b, c, d, e )
  139.  
  140. VLC_EXPORT( int, var_Type, ( vlc_object_t *, const char * ) LIBVLC_USED );
  141. #define var_Type(a,b) var_Type( VLC_OBJECT(a), b )
  142.  
  143. VLC_EXPORT( int, var_Set, ( vlc_object_t *, const char *, vlc_value_t ) );
  144. #define var_Set(a,b,c) var_Set( VLC_OBJECT(a), b, c )
  145.  
  146. VLC_EXPORT( int, var_Get, ( vlc_object_t *, const char *, vlc_value_t * ) );
  147. #define var_Get(a,b,c) var_Get( VLC_OBJECT(a), b, c )
  148.  
  149. VLC_EXPORT( int, var_SetChecked, ( vlc_object_t *, const char *, int, vlc_value_t ) );
  150. #define var_SetChecked(o,n,t,v) var_SetChecked(VLC_OBJECT(o),n,t,v)
  151. VLC_EXPORT( int, var_GetChecked, ( vlc_object_t *, const char *, int, vlc_value_t * ) );
  152. #define var_GetChecked(o,n,t,v) var_GetChecked(VLC_OBJECT(o),n,t,v)
  153. VLC_EXPORT( int, var_GetAndSet, ( vlc_object_t *, const char *, int, vlc_value_t * ) );
  154.  
  155. VLC_EXPORT( int, var_Inherit, ( vlc_object_t *, const char *, int, vlc_value_t * ) );
  156.  
  157. VLC_EXPORT( int, var_Command, ( vlc_object_t *, const char *, const char *, const char *, char ** ) );
  158. #define var_Command(a,b,c,d,e) var_Command( VLC_OBJECT( a ), b, c, d, e )
  159.  
  160. VLC_EXPORT( void, var_FreeList, ( vlc_value_t *, vlc_value_t * ) );
  161.  
  162.  
  163. /*****************************************************************************
  164.  * Variable callbacks
  165.  *****************************************************************************
  166.  * int MyCallback( vlc_object_t *p_this,
  167.  *                 char const *psz_variable,
  168.  *                 vlc_value_t oldvalue,
  169.  *                 vlc_value_t newvalue,
  170.  *                 void *p_data);
  171.  *****************************************************************************/
  172. VLC_EXPORT( int, var_AddCallback, ( vlc_object_t *, const char *, vlc_callback_t, void * ) );
  173. VLC_EXPORT( int, var_DelCallback, ( vlc_object_t *, const char *, vlc_callback_t, void * ) );
  174. VLC_EXPORT( int, var_TriggerCallback, ( vlc_object_t *, const char * ) );
  175.  
  176. #define var_AddCallback(a,b,c,d) var_AddCallback( VLC_OBJECT(a), b, c, d )
  177. #define var_DelCallback(a,b,c,d) var_DelCallback( VLC_OBJECT(a), b, c, d )
  178. #define var_TriggerCallback(a,b) var_TriggerCallback( VLC_OBJECT(a), b )
  179.  
  180. /*****************************************************************************
  181.  * helpers functions
  182.  *****************************************************************************/
  183.  
  184. /**
  185.  * Set the value of an integer variable
  186.  *
  187.  * \param p_obj The object that holds the variable
  188.  * \param psz_name The name of the variable
  189.  * \param i The new integer value of this variable
  190.  */
  191. static inline int var_SetInteger( vlc_object_t *p_obj, const char *psz_name, int i )
  192. {
  193.     vlc_value_t val;
  194.     val.i_int = i;
  195.     return var_SetChecked( p_obj, psz_name, VLC_VAR_INTEGER, val );
  196. }
  197.  
  198. /**
  199.  * Set the value of an boolean variable
  200.  *
  201.  * \param p_obj The object that holds the variable
  202.  * \param psz_name The name of the variable
  203.  * \param b The new boolean value of this variable
  204.  */
  205. static inline int var_SetBool( vlc_object_t *p_obj, const char *psz_name, bool b )
  206. {
  207.     vlc_value_t val;
  208.     val.b_bool = b;
  209.     return var_SetChecked( p_obj, psz_name, VLC_VAR_BOOL, val );
  210. }
  211.  
  212. /**
  213.  * Set the value of a time variable
  214.  *
  215.  * \param p_obj The object that holds the variable
  216.  * \param psz_name The name of the variable
  217.  * \param i The new time value of this variable
  218.  */
  219. static inline int var_SetTime( vlc_object_t *p_obj, const char *psz_name, int64_t i )
  220. {
  221.     vlc_value_t val;
  222.     val.i_time = i;
  223.     return var_SetChecked( p_obj, psz_name, VLC_VAR_TIME, val );
  224. }
  225.  
  226. static inline int var_SetCoords( vlc_object_t *obj, const char *name,
  227.                                  int32_t x, int32_t y )
  228. {
  229.     vlc_value_t val;
  230.     val.coords.x = x;
  231.     val.coords.y = y;
  232.     return var_SetChecked (obj, name, VLC_VAR_COORDS, val);
  233. }
  234. #define var_SetCoords(o,n,x,y) var_SetCoords(VLC_OBJECT(o),n,x,y)
  235.  
  236. /**
  237.  * Set the value of a float variable
  238.  *
  239.  * \param p_obj The object that holds the variable
  240.  * \param psz_name The name of the variable
  241.  * \param f The new float value of this variable
  242.  */
  243. static inline int var_SetFloat( vlc_object_t *p_obj, const char *psz_name, float f )
  244. {
  245.     vlc_value_t val;
  246.     val.f_float = f;
  247.     return var_SetChecked( p_obj, psz_name, VLC_VAR_FLOAT, val );
  248. }
  249.  
  250. /**
  251.  * Set the value of a string variable
  252.  *
  253.  * \param p_obj The object that holds the variable
  254.  * \param psz_name The name of the variable
  255.  * \param psz_string The new string value of this variable
  256.  */
  257. static inline int var_SetString( vlc_object_t *p_obj, const char *psz_name, const char *psz_string )
  258. {
  259.     vlc_value_t val;
  260.     val.psz_string = (char *)psz_string;
  261.     return var_SetChecked( p_obj, psz_name, VLC_VAR_STRING, val );
  262. }
  263.  
  264. /**
  265.  * Set the value of a pointer variable
  266.  *
  267.  * \param p_obj The object that holds the variable
  268.  * \param psz_name The name of the variable
  269.  * \param ptr The new pointer value of this variable
  270.  */
  271. static inline
  272. int var_SetAddress( vlc_object_t *p_obj, const char *psz_name, void *ptr )
  273. {
  274.     vlc_value_t val;
  275.     val.p_address = ptr;
  276.     return var_SetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, val );
  277. }
  278.  
  279. #define var_SetInteger(a,b,c)   var_SetInteger( VLC_OBJECT(a),b,c)
  280. #define var_SetBool(a,b,c)      var_SetBool( VLC_OBJECT(a),b,c)
  281. #define var_SetTime(a,b,c)      var_SetTime( VLC_OBJECT(a),b,c)
  282. #define var_SetFloat(a,b,c)     var_SetFloat( VLC_OBJECT(a),b,c)
  283. #define var_SetString(a,b,c)    var_SetString( VLC_OBJECT(a),b,c)
  284. #define var_SetAddress(o, n, p) var_SetAddress(VLC_OBJECT(o), n, p)
  285.  
  286.  
  287. /**
  288.  * Get an integer value
  289. *
  290.  * \param p_obj The object that holds the variable
  291.  * \param psz_name The name of the variable
  292.  */
  293. LIBVLC_USED
  294. static inline int var_GetInteger( vlc_object_t *p_obj, const char *psz_name )
  295. {
  296.     vlc_value_t val;
  297.     if( !var_GetChecked( p_obj, psz_name, VLC_VAR_INTEGER, &val ) )
  298.         return val.i_int;
  299.     else
  300.         return 0;
  301. }
  302.  
  303. /**
  304.  * Get a boolean value
  305.  *
  306.  * \param p_obj The object that holds the variable
  307.  * \param psz_name The name of the variable
  308.  */
  309. LIBVLC_USED
  310. static inline bool var_GetBool( vlc_object_t *p_obj, const char *psz_name )
  311. {
  312.     vlc_value_t val; val.b_bool = false;
  313.  
  314.     if( !var_GetChecked( p_obj, psz_name, VLC_VAR_BOOL, &val ) )
  315.         return val.b_bool;
  316.     else
  317.         return false;
  318. }
  319.  
  320. /**
  321.  * Get a time value
  322.  *
  323.  * \param p_obj The object that holds the variable
  324.  * \param psz_name The name of the variable
  325.  */
  326. LIBVLC_USED
  327. static inline int64_t var_GetTime( vlc_object_t *p_obj, const char *psz_name )
  328. {
  329.     vlc_value_t val; val.i_time = 0L;
  330.     if( !var_GetChecked( p_obj, psz_name, VLC_VAR_TIME, &val ) )
  331.         return val.i_time;
  332.     else
  333.         return 0;
  334. }
  335.  
  336. static inline void var_GetCoords( vlc_object_t *obj, const char *name,
  337.                                   int32_t *px, int32_t *py )
  338. {
  339.     vlc_value_t val;
  340.  
  341.     if (likely(!var_GetChecked (obj, name, VLC_VAR_COORDS, &val)))
  342.     {
  343.         *px = val.coords.x;
  344.         *py = val.coords.y;
  345.     }
  346.     else
  347.         *px = *py = 0;
  348. }
  349. #define var_GetCoords(o,n,x,y) var_GetCoords(VLC_OBJECT(o),n,x,y)
  350.  
  351. /**
  352.  * Get a float value
  353.  *
  354.  * \param p_obj The object that holds the variable
  355.  * \param psz_name The name of the variable
  356.  */
  357. LIBVLC_USED
  358. static inline float var_GetFloat( vlc_object_t *p_obj, const char *psz_name )
  359. {
  360.     vlc_value_t val; val.f_float = 0.0;
  361.     if( !var_GetChecked( p_obj, psz_name, VLC_VAR_FLOAT, &val ) )
  362.         return val.f_float;
  363.     else
  364.         return 0.0;
  365. }
  366.  
  367. /**
  368.  * Get a string value
  369.  *
  370.  * \param p_obj The object that holds the variable
  371.  * \param psz_name The name of the variable
  372.  */
  373. LIBVLC_USED
  374. static inline char *var_GetString( vlc_object_t *p_obj, const char *psz_name )
  375. {
  376.     vlc_value_t val; val.psz_string = NULL;
  377.     if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) )
  378.         return NULL;
  379.     else
  380.         return val.psz_string;
  381. }
  382.  
  383. LIBVLC_USED
  384. static inline char *var_GetNonEmptyString( vlc_object_t *p_obj, const char *psz_name )
  385. {
  386.     vlc_value_t val;
  387.     if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) )
  388.         return NULL;
  389.     if( val.psz_string && *val.psz_string )
  390.         return val.psz_string;
  391.     free( val.psz_string );
  392.     return NULL;
  393. }
  394.  
  395. LIBVLC_USED
  396. static inline void *var_GetAddress( vlc_object_t *p_obj, const char *psz_name )
  397. {
  398.     vlc_value_t val;
  399.     if( var_GetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, &val ) )
  400.         return NULL;
  401.     else
  402.         return val.p_address;
  403. }
  404.  
  405. /**
  406.  * Increment an integer variable
  407.  * \param p_obj the object that holds the variable
  408.  * \param psz_name the name of the variable
  409.  */
  410. static inline int var_IncInteger( vlc_object_t *p_obj, const char *psz_name )
  411. {
  412.     vlc_value_t val;
  413.     val.i_int = 1;
  414.     var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val );
  415.     return val.i_int;
  416. }
  417. #define var_IncInteger(a,b) var_IncInteger( VLC_OBJECT(a), b )
  418.  
  419. /**
  420.  * Decrement an integer variable
  421.  * \param p_obj the object that holds the variable
  422.  * \param psz_name the name of the variable
  423.  */
  424. static inline int var_DecInteger( vlc_object_t *p_obj, const char *psz_name )
  425. {
  426.     vlc_value_t val;
  427.     val.i_int = -1;
  428.     var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val );
  429.     return val.i_int;
  430. }
  431. #define var_DecInteger(a,b) var_DecInteger( VLC_OBJECT(a), b )
  432.  
  433. static inline unsigned var_OrInteger( vlc_object_t *obj, const char *name,
  434.                                       unsigned v )
  435. {
  436.     vlc_value_t val;
  437.     val.i_int = v;
  438.     var_GetAndSet( obj, name, VLC_VAR_INTEGER_OR, &val );
  439.     return val.i_int;
  440. }
  441. #define var_OrInteger(a,b,c) var_OrInteger(VLC_OBJECT(a),b,c)
  442.  
  443. static inline unsigned var_NAndInteger( vlc_object_t *obj, const char *name,
  444.                                         unsigned v )
  445. {
  446.     vlc_value_t val;
  447.     val.i_int = v;
  448.     var_GetAndSet( obj, name, VLC_VAR_INTEGER_NAND, &val );
  449.     return val.i_int;
  450. }
  451. #define var_NAndInteger(a,b,c) var_NAndInteger(VLC_OBJECT(a),b,c)
  452.  
  453. /**
  454.  * Create a integer variable with inherit and get its value.
  455.  *
  456.  * \param p_obj The object that holds the variable
  457.  * \param psz_name The name of the variable
  458.  */
  459. LIBVLC_USED
  460. static inline int var_CreateGetInteger( vlc_object_t *p_obj, const char *psz_name )
  461. {
  462.     var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
  463.     return var_GetInteger( p_obj, psz_name );
  464. }
  465.  
  466. /**
  467.  * Create a boolean variable with inherit and get its value.
  468.  *
  469.  * \param p_obj The object that holds the variable
  470.  * \param psz_name The name of the variable
  471.  */
  472. LIBVLC_USED
  473. static inline bool var_CreateGetBool( vlc_object_t *p_obj, const char *psz_name )
  474. {
  475.     var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
  476.     return var_GetBool( p_obj, psz_name );
  477. }
  478.  
  479. /**
  480.  * Create a time variable with inherit and get its value.
  481.  *
  482.  * \param p_obj The object that holds the variable
  483.  * \param psz_name The name of the variable
  484.  */
  485. LIBVLC_USED
  486. static inline int64_t var_CreateGetTime( vlc_object_t *p_obj, const char *psz_name )
  487. {
  488.     var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT );
  489.     return var_GetTime( p_obj, psz_name );
  490. }
  491.  
  492. /**
  493.  * Create a float variable with inherit and get its value.
  494.  *
  495.  * \param p_obj The object that holds the variable
  496.  * \param psz_name The name of the variable
  497.  */
  498. LIBVLC_USED
  499. static inline float var_CreateGetFloat( vlc_object_t *p_obj, const char *psz_name )
  500. {
  501.     var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
  502.     return var_GetFloat( p_obj, psz_name );
  503. }
  504.  
  505. /**
  506.  * Create a string variable with inherit and get its value.
  507.  *
  508.  * \param p_obj The object that holds the variable
  509.  * \param psz_name The name of the variable
  510.  */
  511. LIBVLC_USED
  512. static inline char *var_CreateGetString( vlc_object_t *p_obj,
  513.                                            const char *psz_name )
  514. {
  515.     var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT );
  516.     return var_GetString( p_obj, psz_name );
  517. }
  518.  
  519. LIBVLC_USED
  520. static inline char *var_CreateGetNonEmptyString( vlc_object_t *p_obj,
  521.                                                    const char *psz_name )
  522. {
  523.     var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT );
  524.     return var_GetNonEmptyString( p_obj, psz_name );
  525. }
  526.  
  527. /**
  528.  * Create an address variable with inherit and get its value.
  529.  *
  530.  * \param p_obj The object that holds the variable
  531.  * \param psz_name The name of the variable
  532.  */
  533. LIBVLC_USED
  534. static inline void *var_CreateGetAddress( vlc_object_t *p_obj,
  535.                                            const char *psz_name )
  536. {
  537.     var_Create( p_obj, psz_name, VLC_VAR_ADDRESS | VLC_VAR_DOINHERIT );
  538.     return var_GetAddress( p_obj, psz_name );
  539. }
  540.  
  541. #define var_CreateGetInteger(a,b)   var_CreateGetInteger( VLC_OBJECT(a),b)
  542. #define var_CreateGetBool(a,b)   var_CreateGetBool( VLC_OBJECT(a),b)
  543. #define var_CreateGetTime(a,b)   var_CreateGetTime( VLC_OBJECT(a),b)
  544. #define var_CreateGetFloat(a,b)   var_CreateGetFloat( VLC_OBJECT(a),b)
  545. #define var_CreateGetString(a,b)   var_CreateGetString( VLC_OBJECT(a),b)
  546. #define var_CreateGetNonEmptyString(a,b)   var_CreateGetNonEmptyString( VLC_OBJECT(a),b)
  547. #define var_CreateGetAddress(a,b)  var_CreateGetAddress( VLC_OBJECT(a),b)
  548.  
  549. /**
  550.  * Create a integer command variable with inherit and get its value.
  551.  *
  552.  * \param p_obj The object that holds the variable
  553.  * \param psz_name The name of the variable
  554.  */
  555. LIBVLC_USED
  556. static inline int var_CreateGetIntegerCommand( vlc_object_t *p_obj, const char *psz_name )
  557. {
  558.     var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT
  559.                                    | VLC_VAR_ISCOMMAND );
  560.     return var_GetInteger( p_obj, psz_name );
  561. }
  562.  
  563. /**
  564.  * Create a boolean command variable with inherit and get its value.
  565.  *
  566.  * \param p_obj The object that holds the variable
  567.  * \param psz_name The name of the variable
  568.  */
  569. LIBVLC_USED
  570. static inline bool var_CreateGetBoolCommand( vlc_object_t *p_obj, const char *psz_name )
  571. {
  572.     var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT
  573.                                    | VLC_VAR_ISCOMMAND );
  574.     return var_GetBool( p_obj, psz_name );
  575. }
  576.  
  577. /**
  578.  * Create a time command variable with inherit and get its value.
  579.  *
  580.  * \param p_obj The object that holds the variable
  581.  * \param psz_name The name of the variable
  582.  */
  583. LIBVLC_USED
  584. static inline int64_t var_CreateGetTimeCommand( vlc_object_t *p_obj, const char *psz_name )
  585. {
  586.     var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT
  587.                                    | VLC_VAR_ISCOMMAND );
  588.     return var_GetTime( p_obj, psz_name );
  589. }
  590.  
  591. /**
  592.  * Create a float command variable with inherit and get its value.
  593.  *
  594.  * \param p_obj The object that holds the variable
  595.  * \param psz_name The name of the variable
  596.  */
  597. LIBVLC_USED
  598. static inline float var_CreateGetFloatCommand( vlc_object_t *p_obj, const char *psz_name )
  599. {
  600.     var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT
  601.                                    | VLC_VAR_ISCOMMAND );
  602.     return var_GetFloat( p_obj, psz_name );
  603. }
  604.  
  605. /**
  606.  * Create a string command variable with inherit and get its value.
  607.  *
  608.  * \param p_obj The object that holds the variable
  609.  * \param psz_name The name of the variable
  610.  */
  611. LIBVLC_USED
  612. static inline char *var_CreateGetStringCommand( vlc_object_t *p_obj,
  613.                                            const char *psz_name )
  614. {
  615.     var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT
  616.                                    | VLC_VAR_ISCOMMAND );
  617.     return var_GetString( p_obj, psz_name );
  618. }
  619.  
  620. LIBVLC_USED
  621. static inline char *var_CreateGetNonEmptyStringCommand( vlc_object_t *p_obj,
  622.                                                    const char *psz_name )
  623. {
  624.     var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT
  625.                                    | VLC_VAR_ISCOMMAND );
  626.     return var_GetNonEmptyString( p_obj, psz_name );
  627. }
  628.  
  629. #define var_CreateGetIntegerCommand(a,b)   var_CreateGetIntegerCommand( VLC_OBJECT(a),b)
  630. #define var_CreateGetBoolCommand(a,b)   var_CreateGetBoolCommand( VLC_OBJECT(a),b)
  631. #define var_CreateGetTimeCommand(a,b)   var_CreateGetTimeCommand( VLC_OBJECT(a),b)
  632. #define var_CreateGetFloatCommand(a,b)   var_CreateGetFloatCommand( VLC_OBJECT(a),b)
  633. #define var_CreateGetStringCommand(a,b)   var_CreateGetStringCommand( VLC_OBJECT(a),b)
  634. #define var_CreateGetNonEmptyStringCommand(a,b)   var_CreateGetNonEmptyStringCommand( VLC_OBJECT(a),b)
  635.  
  636. LIBVLC_USED
  637. static inline int var_CountChoices( vlc_object_t *p_obj, const char *psz_name )
  638. {
  639.     vlc_value_t count;
  640.     if( var_Change( p_obj, psz_name, VLC_VAR_CHOICESCOUNT, &count, NULL ) )
  641.         return 0;
  642.     return count.i_int;
  643. }
  644. #define var_CountChoices(a,b) var_CountChoices( VLC_OBJECT(a),b)
  645.  
  646.  
  647. static inline bool var_ToggleBool( vlc_object_t *p_obj, const char *psz_name )
  648. {
  649.     vlc_value_t val;
  650.     var_GetAndSet( p_obj, psz_name, VLC_VAR_BOOL_TOGGLE, &val );
  651.     return val.b_bool;
  652. }
  653. #define var_ToggleBool(a,b) var_ToggleBool( VLC_OBJECT(a),b )
  654.  
  655.  
  656. LIBVLC_USED
  657. static inline bool var_InheritBool( vlc_object_t *obj, const char *name )
  658. {
  659.     vlc_value_t val;
  660.  
  661.     if( var_Inherit( obj, name, VLC_VAR_BOOL, &val ) )
  662.         val.b_bool = false;
  663.     return val.b_bool;
  664. }
  665. #define var_InheritBool(o, n) var_InheritBool(VLC_OBJECT(o), n)
  666.  
  667. LIBVLC_USED
  668. static inline int var_InheritInteger( vlc_object_t *obj, const char *name )
  669. {
  670.     vlc_value_t val;
  671.  
  672.     if( var_Inherit( obj, name, VLC_VAR_INTEGER, &val ) )
  673.         val.i_int = 0;
  674.     return val.i_int;
  675. }
  676. #define var_InheritInteger(o, n) var_InheritInteger(VLC_OBJECT(o), n)
  677.  
  678. LIBVLC_USED
  679. static inline float var_InheritFloat( vlc_object_t *obj, const char *name )
  680. {
  681.     vlc_value_t val;
  682.  
  683.     if( var_Inherit( obj, name, VLC_VAR_FLOAT, &val ) )
  684.         val.f_float = 0.;
  685.     return val.f_float;
  686. }
  687. #define var_InheritFloat(o, n) var_InheritFloat(VLC_OBJECT(o), n)
  688.  
  689. LIBVLC_USED LIBVLC_MALLOC
  690. static inline char *var_InheritString( vlc_object_t *obj, const char *name )
  691. {
  692.     vlc_value_t val;
  693.  
  694.     if( var_Inherit( obj, name, VLC_VAR_STRING, &val ) )
  695.         val.psz_string = NULL;
  696.     else if( val.psz_string && !*val.psz_string )
  697.     {
  698.         free( val.psz_string );
  699.         val.psz_string = NULL;
  700.     }
  701.     return val.psz_string;
  702. }
  703. #define var_InheritString(o, n) var_InheritString(VLC_OBJECT(o), n)
  704.  
  705. static inline mtime_t var_InheritTime( vlc_object_t *obj, const char *name )
  706. {
  707.     vlc_value_t val;
  708.  
  709.     if( var_Inherit( obj, name, VLC_VAR_TIME, &val ) )
  710.         val.i_time = 0;
  711.     return val.i_time;
  712. }
  713. #define var_InheritTime(o, n) var_InheritTime(VLC_OBJECT(o), n)
  714.  
  715. static inline void *var_InheritAddress( vlc_object_t *obj, const char *name )
  716. {
  717.     vlc_value_t val;
  718.  
  719.     if( var_Inherit( obj, name, VLC_VAR_ADDRESS, &val ) )
  720.         val.p_address = NULL;
  721.     return val.p_address;
  722. }
  723. #define var_InheritAddress(o, n) var_InheritAddress(VLC_OBJECT(o), n)
  724.  
  725. #define var_GetInteger(a,b)   var_GetInteger( VLC_OBJECT(a),b)
  726. #define var_GetBool(a,b)   var_GetBool( VLC_OBJECT(a),b)
  727. #define var_GetTime(a,b)   var_GetTime( VLC_OBJECT(a),b)
  728. #define var_GetFloat(a,b)   var_GetFloat( VLC_OBJECT(a),b)
  729. #define var_GetString(a,b)   var_GetString( VLC_OBJECT(a),b)
  730. #define var_GetNonEmptyString(a,b)   var_GetNonEmptyString( VLC_OBJECT(a),b)
  731. #define var_GetAddress(a,b)  var_GetAddress( VLC_OBJECT(a),b)
  732.  
  733. /**
  734.  * @}
  735.  */
  736. #endif /*  _VLC_VARIABLES_H */
  737.